<!doctype html>
<html>
<head>
<style type="text/css" title="teste">
    .box {
        margin: 0px;
        padding: 0px;
        overflow: hidden;
    }
    .border { border:1px solid black; }

    /* font family classes */
    .mono { font-family: monospace; }
    .monofallthrough { font-family: nonexistant, monospace; }
    .serif { font-family: serif; }
    .sans-serif { font-family: sans-serif; }
    .courier { font-family: courier; }
    .arial { font-family: arial; }
    .times { font-family: times; }
    .helvetica { font-family: helvetica; }

    /* ch-length containers */
    .one { width: 1ch; }
    .four { width: 4ch; }
    .zero { width: 0ch; }
    .alphalen { width: 26ch; }

    /* font sizes for the relative size test */
    .large { font-size:20px; }
    .relative { font-size:1ch; }

    /* pass/fail colors */
    .pass { color: green; }
    .fail { color: red; }

    /* pseudo-elements */
    #pseudo{
        font-size:2ch;
    }
    #pseudo:first-line {
        font-size:3ch;
    }
    #pseudo span:last-child {
        font-size:1ch;
    }
</style>
<script src="../../resources/js-test.js"></script>
<script type="text/javascript">
</script>
</head>
<body id="body">
    <p>This is a test to make sure ch units work as intended. You should not see <b>anything</b> red on this page.</p>
    Only 'PASS' should be visible:
    <div id="box_mono_zero" class="box mono zero"></div>
    <script type="text/javascript">
        description("This is a test to make sure ch units work as intended.")
        shouldEvaluateTo('document.getElementById("box_mono_zero").clientWidth', "0");
    </script>

    <div id="box_mono_four1" class="box mono four"><span class="pass">PASS</span><span class="fail">FAIL</span></div>
    <div id="box_mono_four2" class="box mono four"><span class="pass">PASS</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("box_mono_four1").clientWidth', 'document.getElementById("box_mono_four2").clientWidth');
    </script>

    <div id="box_monofallthrough_four1" class="box monofallthrough four"><span class="pass">PASS</span><span class="fail">FAIL</span></div>
    <div id="box_monofallthrough_four2" class="box monofallthrough four"><span class="pass">PASS</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("box_monofallthrough_four1").clientWidth', 'document.getElementById("box_monofallthrough_four2").clientWidth');
    </script>

    The whole lower case alphabet should be readable:
    <div id="mono_box_alphalen1" class="mono box alphalen"><span class="pass">abcdefghijklmnopqrstuvwxyz</span><span class="fail">FAIL</span></div>
    <div id="mono_box_alphalen2" class="mono box alphalen"><span class="pass">abcdefghijklmnopqrstuvwxyz</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("mono_box_alphalen1").clientWidth', 'document.getElementById("mono_box_alphalen2").clientWidth');
    </script>

    <div id="box_one" class="box one"></div>
    <div id="box_alphalen" class="box alphalen"><span class="pass">abcdefghijklmnopqrstuvwxyz</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("box_one").clientWidth * 26', 'document.getElementById("box_alphalen").clientWidth');
    </script>

    <div id="arial_box_one" class="arial box one"></div>
    <div id="arial_box_alphalen" class="arial box alphalen"><span class="pass">abcdefghijklmnopqrstuvwxyz</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("arial_box_one").clientWidth * 26', 'document.getElementById("arial_box_alphalen").clientWidth', 0.5);
    </script>

    <div id="helvetica_box_one" class="helvetica box one"></div>
    <div id="helvetica_box_alphalen" class="helvetica box alphalen"><span class="pass">abcdefghijklmnopqrstuvwxyz</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("helvetica_box_one").clientWidth * 26', 'document.getElementById("helvetica_box_alphalen").clientWidth', 0.5);
    </script>

    Four zeroes should be visible, nothing else:
    <div id="times_box_one" class="times box one"></div>
    <div id="box_times_four" class="box times four"><span class="pass">0000</span><span class="fail">FAIL</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("times_box_one").clientWidth * 4', 'document.getElementById("box_times_four").clientWidth', 0.5);
    </script>

    <div id="box_arial_four" class="box arial four"><span class="pass">0000</span><span class="fail">FAIL</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("arial_box_one").clientWidth * 4', 'document.getElementById("box_arial_four").clientWidth', 0.5);
    </script>

    <div id="box_helvetica_four" class="box helvetica four"><span class="pass">0000</span><span class="fail">FAIL</span></div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("helvetica_box_one").clientWidth * 4', 'document.getElementById("box_helvetica_four").clientWidth', 0.5);
    </script>

    There should be more than one green '|' visible (non-monospaced fonts):
    <div id="box_arial_one" class="box arial one"><span class="pass">|</span><span class="pass">||0</span><span class="fail">||||</span></div>
    <div id="ref_box_arial_one" class="box arial" style="display:inline-block"><span class="pass">|</span><span class="pass">||</span></div>
    <script type="text/javascript">
        shouldBeGreaterThanOrEqual('document.getElementById("ref_box_arial_one").clientWidth', 'document.getElementById("box_arial_one").clientWidth');
    </script>

    <div id="box_times_one" class="box times one"><span class="pass">|</span><span class="pass">||0</span><span class="fail">||||</span></div>
    <div id="ref_box_times_one" class="box times" style="display:inline-block"><span class="pass">|</span><span class="pass">||</span></div>
    <script type="text/javascript">
        shouldBeGreaterThanOrEqual('document.getElementById("ref_box_times_one").clientWidth', 'document.getElementById("box_times_one").clientWidth');
    </script>

    <div id="box_sansserif_one" class="box sansserif one"><span class="pass">|</span><span class="pass">||0</span><span class="fail">||||</span></div>
    <div id="ref_box_sansserif_one" class="box times" style="display:inline-block"><span class="pass">|</span><span class="pass">||</span></div>
    <script type="text/javascript">
        shouldBeGreaterThanOrEqual('document.getElementById("ref_box_sansserif_one").clientWidth', 'document.getElementById("box_sansserif_one").clientWidth');
    </script>

    <div class="border">
        This box has a 20px font size.
        The last two '0's should be the same size.
        <div class="large pass">
            <div id="reference" class="one">0</div>
            <div id="forcedsmall" class="box one">0</div>
            <div id="chsmall" class="box one relative">0</div>
        </div>
        <script type="text/javascript">
            var ref = document.getElementById("reference");
            var refWidth = ref.clientWidth;
            var small = document.getElementById("forcedsmall");
            small.style.fontSize = refWidth +"px";
            var w1 = small.clientWidth;
            var h1 = small.clientHeight;
            var chsmall = document.getElementById("chsmall");
            var w2 = chsmall.clientWidth;
            var h2 = chsmall.clientHeight;
            shouldBeFalse("w1 !== w2 || h1 !== h2");
        </script>
    </div>
    <div id="pseudo">
        <span id="ps1">I'm a pseudo selected first line, I should be bigger than the rest.</span><br>
        <span id="ps2">I'm the second line.</span><br>
        <span id="ps3">Last in line. But one day... the throne will be mine!</span>
    </div>
    <script>
        var ps1h = document.getElementById('ps1').offsetHeight;
        var ps2h = document.getElementById('ps2').offsetHeight;
        var ps3h = document.getElementById('ps3').offsetHeight;
        shouldBeTrue("ps1h > ps2h && ps1h > ps3h");
    </script>

    <div id="box_mono_one" class="box mono one"></div>
    <div id="box_mono" class="box mono" style="display:inline-block">0</div>
    <script type="text/javascript">
        shouldEvaluateTo('document.getElementById("box_mono_one").clientWidth', 'document.getElementById("box_mono").clientWidth', 0.5);
    </script>
    <script>
        // Text with '<span class="fail">' must not appear in DumpRenderTree's output, only when opening this file in a web browser.
        if (window.testRunner) {
            var CSSRules = 'rules';
            for (var i = 0; i < document.styleSheets[0][CSSRules].length; ++i)
                if (document.styleSheets[0][CSSRules][i].selectorText === ".fail") {
                    document.styleSheets[0][CSSRules][i].style['display'] = 'none';
                    break;
                }
        }
    </script>
</body>
</html>
